#include<stdio.h>
#include<stdlib.h>
#include<string.h>
FILE *fp;
  int e=1;
  int g=0;
  int l=0;
  int k=0;
  int i;
  int h;
  char f;
  int  c[1000];
  char a[100000];
  int count=0,n,m;
  int j=0;
  int b=0;
  int flag1=0,flag2=0,flag3=0;
  char s[100];
  char p[200];
  char z[100];
void fun1(){             //功能1
printf("该文件中的字符数：%d\n",m);
printf("该文件中的单词数：%d\n",count);                 
printf("该文件中的句子数: %d\n",j);
printf("输出结束\n");
}
void fun2(){             //输出文本
    char w;
	FILE *fp1; 
    fp1 = fopen(p, "r+");
    while((w= fgetc(fp1)) != EOF)
    {
      printf("%c",w);}
printf("\n输出结束\n");
}
void fun3(){             //查询指定单词
printf("请输入想查询第几个单词\n");
printf("退出请输入0\n");
while(scanf("%d",&h)!=EOF){
   if(h==0){
      printf("查询结束\n");
      break;
   }
g=0;
l=0;
for(i=1;i<=h;i++){
     g=g+c[i];
     l=l+c[i-1];}
   if(h<e){
    for(k=l;k<g;k++){
     if(a[k]!='.'&&a[k]!='!'&&a[k]!='?'&&a[k]!=','&&a[k]!=')'&&a[k]!='('){
        printf("%c",a[k]);
}      
}
   printf("\n请输入想查询第几个单词\n");
}
else{
   printf("超出查询范围,范围是1~%d,请重新输入\n",e-1);
}
}
}
void fun4(){             //输出行数
	int length=0,len=0,len1=0;
   char w;
	FILE *fp1; 
    fp1 = fopen(p, "r+");
    while((w= fgetc(fp1)) != EOF)
    {
      // printf("%c",w);
      if(flag3==0){
      if(flag2!=0){
      if(w== ' '){
          len1++;                                 //碰到连续的两个及以上空格，则段落数+1
          flag3=1;
        }
       }
       if(w==' '){
         flag2++;                                //遇到空格加一
       }
       else{
         flag2=0;                                //遇到其他字符则清零
       }  
      }
      if(flag1==1){
        if(w== '\n'){
          len++;                                 //碰到连续的换行符，则空行数+1
        }
       }
       if(w== '\n'){
         flag1=1;
         length++;                               //碰到换行符，则行数+1
         flag3=0;
       }
       else{
         flag1=0;
       }                  
    }
    printf("该文件中的空行数为：%d\n", len);        //输出文件中的空行数 
    printf("该文件中的行数为：  %d\n", length+1);    //输出文件中的行数 
     printf("该文件中的段落为：%d\n", len1);        //输出文件中的空行数 

}
int main(void)
{ 
printf("请输入指令:wc.exe -* file name\n");
printf("a 读取字符、句子、单词数\n");
printf("b 输出txt文本\n"); 
printf("c 查询单词\n"); 
printf("d 读取段落、空行、行数\n"); 
printf("u 退出\n");
 gets(z);                                     //获取文件的地址
 f=z[8];                                     //获取指令
 //printf("%c",f);
 for(i=10;i<strlen(z);i++){                   //获取地址
    p[i-10]=z[i];
 }
 //printf("%s",p);
if((fp=fopen(p,"r"))==NULL){                   //txt文件的位置
printf("打开文件失败...\n");
exit(0);                                          //终止函数 
system("pause");
}
printf("打开文件成功\n");
m=0;
while(fscanf(fp,"%s",s)!=EOF){                    //fscanf遇到空格会终止，从而可以判断单词的个数
if(b==0)
{
 count++;   
}               
n=strlen(s); 
c[e]=n;//用来存单词长度包括标点符号
e++;
// printf(" n=%d  ",n);                             //获取两个空格之间的s的长度，它是单词的长度也可能包括了符号                               
for(i=0;i<n;i++){
   if(s[i]=='.'||s[i]=='!'||s[i]=='?'){             //用这个来判断句子数
    j++;
   }    
}  
if(s[i]=='.'||s[i]=='!'||s[i]=='?'||s[i]==','||s[i]==')'||s[i]=='('){       
   b=1;
} 
   /*如果每一段最后一位是符号，按上方的逻辑它会加一次，后面读到的是空格，所以还会加一次，
   所以符号和空格会各加一次，所以如果上一次最后一个是符号，b相当于一个标记，表示我已经
   加过了你不要再加了*/  
for(i=0;i<n;i++){                                   //将s内的字符传递给a;
    a[m+i]=s[i];
}                       
m=m+n;                                              //计算除空格外的字符数  
}
 if(f=='a'){                               //执行第一个指令，后进入循环读取指令模式
      fun1();
      printf("请输入指令:\n");
      //continue;
   }
     if(f=='b'){
      fun2();
      printf("请输入指令:\n");
     // continue;
   }
    if(f=='c'){
      fun3();
      printf("请输入指令:\n");
      //continue;
   }
     if(f=='d'){
      fun4();
      printf("请输入指令:\n");
     // continue;
   }
    if(f=='u'){
      printf("服务结束\n");
     //break;
   }
   else if(f!='a'&&f!='b'&&f!='c'&&f!='d'&&f!='\n'){
     printf("请输入正确的指令\n");
       //continue;
   }
while(scanf("%c",&f)!=EOF){
   if(f=='a'){
      fun1();
      printf("请输入指令:\n");
      continue;
   }
     if(f=='b'){
      fun2();
      printf("请输入指令:\n");
     continue;
   }
    if(f=='c'){
      fun3();
      printf("请输入指令:\n");
      continue;
   }
     if(f=='d'){
      fun4();
      printf("请输入指令:\n");
      continue;
   }
    if(f=='u'){
      printf("服务结束\n");
     break;
   }
   else if(f!='a'&&f!='b'&&f!='c'&&f!='d'&&f!='\n'){
     printf("请输入正确的指令\n");
       continue;
   }
   }
fclose(fp);//关闭文件 
system("pause");
return 0;
}

